// Package easyValidate 该包是参数校验器的实现
// 目前使用反射来对用户传入的参数做校验
// TODO: 使用AST代替反射实现
package easyValidate

import (
	"fmt"
	"reflect"
)

type defaultValidator struct {

}


func ValidateStruct(val interface{}) error {
	var err error
	var checkParam CheckParam
	Type, Value := reflect.TypeOf(val), reflect.ValueOf(val)
	for i := 0; i < Value.NumField(); i++ {
		str := Type.Field(i).Tag.Get(ValidateTag)
		checkParam, err = splitCheckTag(str)
		if err != nil {
			return err
		}
		if !check(checkParam, Value.Field(i)) {
			err = fmt.Errorf("字段[%v]错误, 值为[%v], 校验规则为[%v]", Type.Field(i).Name, Value.Field(i), str)
			return err
		}
	}
	return nil
}




